﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace PCLLearning.Framework.Models
{
    /// <summary>
    /// https://learn.microsoft.com/zh-cn/windows/win32/api/shlobj_core/ns-shlobj_core-browseinfoa
    /// </summary>
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public class BrowseInfo
    {
        /// <summary>
        /// 对话框的所有者窗口的句柄。
        /// </summary>
        public IntPtr hwndOwner = IntPtr.Zero;
        /// <summary>
        /// 一个 PIDL，指定要从中开始浏览的根文件夹的位置。
        /// 只有命名空间层次结构中的指定文件夹及其子文件夹才会显示在对话框中。
        /// 此成员可以为 NULL;在这种情况下，将使用默认位置。
        /// </summary>
        public IntPtr pidlRoot = IntPtr.Zero;
        /// <summary>
        /// 指向缓冲区的指针，用于接收用户选择的文件夹的显示名称。
        /// 此缓冲区的大小假定为MAX_PATH字符。
        /// </summary>
        public String? pszDisplayName = null;
        /// <summary>
        /// 指向对话框中树视图控件上方显示的空终止字符串的指针。
        /// 此字符串可用于指定用户的说明。
        /// </summary>
        public String? lpszTitle = null;
        /// <summary>
        /// 指定对话框选项的标志。
        /// </summary>
        public UInt32 ulFlags = 0;
        /// <summary>
        /// 指向对话框在事件发生时调用的应用程序定义函数的指针。
        /// 此成员可以为 NULL。
        /// </summary>
        public IntPtr lpfn = IntPtr.Zero;
        /// <summary>
        /// 对话框传递给回调函数的应用程序定义值（如果在 lpfn 中指定）。
        /// </summary>
        public IntPtr lParam = IntPtr.Zero;
        /// <summary>
        /// 一个整数值，该值接收与所选文件夹关联的图像的索引，存储在系统映像列表中。
        /// </summary>
        public int iImage = 0;
    }
}
